package dataMode;

public class QRAlphaNumeric extends QRData {

	public QRAlphaNumeric(String data, int version, int errorCorrectionLevel) {		
		super(data, version, errorCorrectionLevel);
		super.mode = QRData.MODE_ALPHANUMERIC;
		
		super.encodeDataToBinary();
	}
	
	// Encode la chaine de caractere en chaine de bit pour le mode ALPHA NUMERIQUE
	protected void encode(){
		int lenghtData = data.length();
		int tmp1;
		int tmp2;
		String tmpBinResult;
		// Parcours de la chaine de caractère de 2 en 2
		for(int i=0; i<lenghtData; i=i+2)
		{
			// Dernier caractère dans le cas où la taille de la chaine est impaire
			if(lenghtData%2 != 0 && i == lenghtData-1) { 
				tmpResult = super.getCode(data.charAt(i));
				tmpBinResult = Integer.toBinaryString(tmpResult);
				bitStringSize = 6;
			}
			else {
				// On récupère les codes ASCII
				tmp1 = this.getCode(data.charAt(i));
				tmp2 = this.getCode(data.charAt(i+1));
				tmpResult = (45 * tmp1) + tmp2; // Calcul spécifique d'encodage
				bitStringSize = 11;
			}
			
			tmpBinResult = Integer.toBinaryString(tmpResult);
			int lenghtTmpBinResult = tmpBinResult.length();
			
			if(lenghtTmpBinResult < bitStringSize)
				tmpBinResult = addZeroOnLeft(tmpBinResult, bitStringSize);
			
			this.binaryData += tmpBinResult;
		}
	}

}
